// 箭头函数
// 箭头函数并且没有自己的this，arguments，super或new.target
// 箭头函数表达式更适用于那些本来需要匿名函数的地方
// 箭头函数它不能用作构造函数。

// function fn(num) {
//     return num + 1;
// }
const fn = (num) => {
    console.log(num);
    return num;
};
// 如果只有一个表达式可以省略return
// const fn = (num) => num + 1;
console.log(fn(5));
// 极大的简化回调函数的编写
const arr = [1, 2, 3, 4, 5];
console.log(arr.filter((item) => item % 2));

// 普通写法 这里的this指向的是调用say方法的对象
const person = {
    name: "jack",
    say: function () {
        console.log(`hi,my name is ${this.name}`);
    },
    sayAsync: function () {
        const _this = this;
        // 普通函数的写法要通过闭包的方式来改变this的指向
        setTimeout(function () {
            console.log(_this.name);
        });
    },
};
person.say();
person.sayAsync();

// 箭头函数写法
const person2 = {
    name: "tom",
    say: () => console.log(`hi,my name is ${this.name}`),
    // this指向当前作用域中的this
    sayAsync: function () {
        setTimeout(() => {
            console.log(this.name);
        });
    },
};

person2.say(); // 输出 hi,my name is undefined'
person2.sayAsync(); // 输出 tom
